<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    //变量作用域：变量的作用域无非就是`两种：全局变量和局部变量
    //函数内部可以直接读取全局变量
    //函数外部无法读取函数内的局部变量

    // var x=1;//全局变量 一直都存在的  x的值会递增
    // function fun(){
    //     console.log(++x);
    // }
    // fun();
    // fun();
    // fun();

    // function fun(){
    //     var x=1;//局部变量 只在当前函数执行过程中有效 函数执行结束 会被浏览器回收 所以执行的结果都一样
    //     console.log(++x);
    // }
    // fun();
    // fun();
    // fun();


    // function fun(){
    //     var x=0;
    //     console.log(++x);
    //     console.log(++x);
    //     console.log(++x);
    //     console.log(++x);
    // }
    // fun();

    //如何从外部读取局部变量？正常情况下是做不到的，需要变通！
    //那就是在函数的内部 在定义一个函数
    // function fun(){
    //     var x=10;
    //     function f(){
    //         console.log(++x);
    //     }
    //     f();
    //     f();
    //     f();
    // }
    // fun();

    // function fun(){
    //     var x=10;
    //     //闭包
    //     return function(){
    //         console.log(++x);
    //     }
    // }
    //     var f=fun();
    //     f();
    //     f();
    //     f();
   
    
    function fun()
{
    var x=10;
    return function(){
        console.log(++x);
    }
}
var f=fun();
f();
f();
f();
    //闭包：定义在一个函数内部的函数 并且被外层函数外部所引用
    //作用：让外层函数内部变量持久保存  模拟全局变量
</script>
</html>